package cn.fairy.filter;

import com.alibaba.fastjson.JSON;
import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
import com.netflix.zuul.exception.ZuulException;
import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Component;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

@Component
public class CustomFilter extends ZuulFilter {
    // filter类型："pre"前置
    @Override
    public String filterType() {
        return "pre";
    }
    // 执行顺序
    @Override
    public int filterOrder() {
        return 0;
    }
    // 要不要执行run方法
    //    如果返回的是true  那么就执行run方法
    @Override
    public boolean shouldFilter() {

        // 获取request对象 获取请求当中的URL
        HttpServletRequest request = RequestContext.getCurrentContext().getRequest();
        String uri = request.getRequestURI();
        // 判断是否包含/register，/login，static，
        if(uri.endsWith("/register")||uri.endsWith("/login")||uri.contains("static")){
            return false;
        }
        return true;
    }
    // 核心方法
    @Override
    public Object run() throws ZuulException {
        // 获取请求对象
        HttpServletRequest request = RequestContext.getCurrentContext().getRequest();
        // 响应对象
        HttpServletResponse response = RequestContext.getCurrentContext().getResponse();
        // 获取请求头中的token
        String token = request.getHeader("token");
        // 判断是否有token
        if(StringUtils.isBlank(token)&&!tokenIsTrue(token)){

            //返回的数据
            Map result = new HashMap<>();
            result.put("success", false);//是否成功
            result.put("message", "没登录");//消息
            result.put("code", 402);//状态码
            result.put("data", null);//数据
            //
            String resultJsonString = JSON.toJSONString(result);
            response.setStatus(402);
            try {
                //将返回数据写入到response
                response.getWriter().write(resultJsonString);
            } catch (IOException e) {
                e.printStackTrace();
            }
            //拦截   固定使用方式
            RequestContext.getCurrentContext().setSendZuulResponse(false);
        }


        //执行到这里  就放行了   返回值  不用管
        return null;
    }
    private boolean tokenIsTrue(String token){

        return false;
    }
    /*
     * empty  不判断空格
     */
    public static void main(String[] args) {
        String s = "  ";
        System.out.println(StringUtils.isEmpty(s));
        System.out.println(StringUtils.isBlank(s));
    }
}
